﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using sgp.Models;

namespace sgp.Controllers
{ 
    public class FuncionarioController : Controller
    {
        private DbParoquia db = new DbParoquia();

        //
        // GET: /Funcionario/

        [Authorize]
        public ViewResult Index(int? setorId)
        {
            ViewBag.Setor = db.Setores;
            if (setorId == null)
            {
                return View(db.Funcionarios.Include("Setor"));
            }
            else
            {
                return View(db.Funcionarios.Where(l => l.Setor.Id == setorId).Include("Setor"));
            }
        }

        //
        // GET: /Funcionario/Details/5

        public ViewResult Details(int id)
        {
            Funcionario funcionario = db.Funcionarios.Include("Setor").Where(p => p.Id == id).Single();
            return View(funcionario);
            
        }

        //
        // GET: /Funcionario/Create

        public ActionResult Create()
        {
            
            ViewBag.Setores = db.Setores.ToList();
            Funcionario func = new Funcionario();
            func.Setor = new Setor();
            func.Endereco = new Endereco();
            return View(func);
        }
//
        // POST: /Funcionario/Create

        [HttpPost]    
        public ActionResult Create(Funcionario funcionario)
        {
            funcionario.Setor = db.Setores.Find(funcionario.Setor.Id);
            if (ModelState.IsValid)
            {
                db.Funcionarios.Add(funcionario);
                db.SaveChanges();
                return RedirectToAction("Index");  
            }

            return View(funcionario);
        }        
        
        // GET: /Funcionario/Edit/5
 
        public ActionResult Edit(int id)
        {
            
            ViewBag.Setores = db.Setores.ToList();

            Funcionario funcionario = db.Funcionarios.Include("Setor").Where(p => p.Id == id).Single();
            return View(funcionario);
            
        }

        //
        // POST: /Funcionario/Edit/5

        [HttpPost]
        public ActionResult Edit(Funcionario funcionario)
        {

            Funcionario funcionarioEditado = db.Funcionarios.Find(funcionario.Id);
            funcionarioEditado.Setor = db.Setores.Find(funcionario.Setor.Id);
            funcionarioEditado.Nome = funcionario.Nome;
            funcionarioEditado.Matricula = funcionario.Matricula;
            funcionarioEditado.Salario = funcionario.Salario;
            funcionarioEditado.Email = funcionario.Email;
            funcionarioEditado.DataNascimento = funcionario.DataNascimento;
            funcionarioEditado.Endereco.Rua = funcionario.Endereco.Rua;
            funcionarioEditado.Endereco.Numero = funcionario.Endereco.Numero;
            funcionarioEditado.Endereco.Complemento = funcionario.Endereco.Complemento;
            funcionarioEditado.Endereco.Cidade = funcionario.Endereco.Cidade;
            funcionarioEditado.Endereco.Bairro = funcionario.Endereco.Bairro;
            funcionarioEditado.Endereco.Estado = funcionario.Endereco.Estado;

                db.Entry(funcionarioEditado).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            
           
        }

        //
        // GET: /Funcionario/Delete/5
 
        public ActionResult Delete(int id)
        {
            Funcionario funcionario = db.Funcionarios.Include("Setor").Where(p => p.Id == id).Single();
            return View(funcionario);
        }

        //
        // POST: /Funcionario/Delete/5

        [HttpPost, ActionName("Delete")]
        public ActionResult DeleteConfirmed(int id)
        {            
            Funcionario funcionario = db.Funcionarios.Find(id);
            db.Funcionarios.Remove(funcionario);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }
    }
}